If you think Oracle should be using an index to resolve your query and it is not doing so, then make sure the index exists. Here are two ways to check:
Using Oracle Enterprise Manager (OEM), open up your database in the Navigator window; open the Schema folder; open the schema that owns your query table; open Tables; find your table name and open it; open Indexes. Click on each index listed, and the indexed column(s) will show in the right hand pane.
For those who don't have OEM (and those that find it too slow), download show.sql
and run it from SQL*Plus as follows:
@show my_table_name
where my_table_name
is the table you expect to be indexed. show.sql
will list the columns in the table, followed by a list of the indexes including their uniqueness, followed by the columns of each index.
If you can't find the table, perhaps it is a VIEW, or a SYNONYM to a table in another schema.
Do any indexes exist? If so, is there one where the leading columns of the index match the columns of your WHERE clause?
If the answer is NO to either of these questions, then the problem is that there is no index that covers your SQL. Perhaps the index has been accidently dropped, or it never existed at all. You have four choices: